package com.dap.configuration.service.config.service;

import java.io.File;
import java.io.IOException;
import java.util.List;

import com.baidu.disconf.core.common.constants.DisConfigTypeEnum;
import com.baidu.disconf.web.service.config.bo.Config;
import com.baidu.disconf.web.service.config.bo.ConfigHistory;
import com.baidu.ub.common.db.DaoPageResult;
import com.dap.configuration.service.config.bo.ConfigParam;
import com.dap.configuration.service.config.form.ConfListExtensionForm;
import com.dap.configuration.service.config.form.ConfNewExtensionForm;
import com.dap.configuration.service.config.vo.ConfListExtensionVo;

/**
 * @author dengxiang
 * @version 2014-6-16
 */
public interface ConfigExtensionMgr {

	/**
     * @description 根据查询条件获取配置列表
     * @param appId
     * @param envId
     * @param version
     *
     * @return
     */
    DaoPageResult<ConfListExtensionVo> getConfigList(ConfListExtensionForm confListForm, boolean fetchZk, final boolean getErrorMessage);
   
    /**
     * @description 根据configId获取配置信息
     * @param configId
     *
     * @return
     */
    ConfListExtensionVo getConfVo(Long configId);
    
    /**
     * @description 校验新增的配置项信息是否存在key重复等
     * @param confNewForm
     *@param DisConfigTypeEnum
     * @return
     */
	void validateNew(ConfNewExtensionForm confNewForm, DisConfigTypeEnum item);
	
	/**
	 * @description 根据前台传入的新增信息新增配置项信息
     * @param ConfNewExtensionForm
     *@param DisConfigTypeEnum
     * @return
     */
	Config newConfig(ConfNewExtensionForm confNewForm, DisConfigTypeEnum serve);
	
	/**
	 * @description 根据相关参数查询配置信息
     * @param ConfNewExtensionForm
     *@param DisConfigTypeEnum
     * @return
     */
	Config getConfByParameter(Long appId, Long envId, String version,
			String key, DisConfigTypeEnum disConfigTypeEnum, String bankKey,
			String userId);
	
	/**
     * 配置文件的整合
     *
     * @param confListForm
     *
     * @return
	 * @throws IOException 
     */
    public List<File> getDisonfFileList(ConfListExtensionForm confListForm) throws IOException;
    /**
     * 根据Config参数查询list
     * @param confListForm
     * @return
     */
    Config getListByConfig(Config config);

	void notifyZookeeper(Long configId);
	
	/**
	 * @description 根据前台传入的新增信息新增配置项历史信息
     * @param ConfigHistory
     * @return
     */
	void newHistory(Long configId,String value,String action);
	/**
	 * @description 将json字符串转为ConfigParam对象
     * @param ConfigHistory
     * @return
     */
	ConfigParam convertParam(String str);
	/**
	 * @description 根据configId获取Config
     * @param ConfigHistory
     * @return
     */
	Config getConfigById(Long configId);
	/**
	 * @description 根据configId更新值 
     * @param ConfigHistory
     * @return
     */
	String updateItemValue(Long configId, String value);
}
